package com.jfinal.module.wxchat.api;

import com.google.common.collect.Maps;
import com.jfinal.module.wxchat.exceptions.WechatException;
import com.jfinal.module.wxchat.utils.HttpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Map;

/**
 * <p>
 *     上传下载多媒体文件
 * </p>
 *
 * @author Jerry Ou
 * @version 1.0 2014-02-12 13:41
 * @since JDK 1.6
 */
public class MediaApi {
    private static Logger logger = LoggerFactory.getLogger(MediaApi.class);

    /**
     * 公众号可调用本接口来获取多媒体文件。请注意，视频文件不支持下载，调用该接口需http协议。
     *
     * 接口调用请求说明
     * http请求方式: GET
     * http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
     *
     * 请求示例（示例为通过curl命令获取多媒体文件）
     * curl -I -G "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"
     *
     * 参数说明
     *  access_token 必须 调用接口凭证
     *  media_id 必须 媒体文件ID
     *
     * 返回说明
     *  正确情况下的返回HTTP头如下：
     *      HTTP/1.1 200 OK
     *      Connection: close
     *      Content-Type: image/jpeg
     *      Content-disposition: attachment; filename="MEDIA_ID.jpg"
     *      Date: Sun, 06 Jan 2013 10:20:18 GMT
     *      Cache-Control: no-cache, must-revalidate
     *      Content-Length: 339721
     *      curl -G "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"
     *
     *  错误情况下的返回JSON数据包示例如下（示例为无效媒体ID错误）：:
     *      {"errcode":40007,"errmsg":"invalid media_id"}
     *
     * @param accessToken 调用接口凭证
     * @param mediaId 媒体文件ID
     */
    public static void get(String accessToken, String mediaId) {
        //TODO AccessToken 需要从缓存里面获取
        try {
            Map<String, Object> map = Maps.newHashMap();
            map.put("access_token", accessToken);
            map.put("media_id", mediaId);
            String result = HttpUtil.get(Api.MEDIA.MEDIA_GET, map);
            logger.debug(result);
        } catch (Exception e) {
            logger.error("Error to Get Media", e);
            throw new WechatException("Error to Get Media", e);
        }
    }

    /**
     * 通过图片地址下图片
     * @param picUrl
     */
    public static void getImageByPicUrl(String picUrl) {
        String result = HttpUtil.get(picUrl);
        logger.debug(result);
    }

}
